#include "usermodel.hpp"
#include "db.hpp"

#include <iostream>
using namespace std;

// User 表的增加方法
bool UserModel::insert(User &user)
{
    // 1. 组装sql
    char sql[1024] = {0};
    sprintf(sql, "insert into User(name, password, state) values ('%s', '%s', '%s')",
        user.getName().c_str(), user.getPassword().c_str(), user.getState().c_str());
    
    // 2. 连接数据库，添加用户，回表查询获取插入的主键id
    MySQL mysql;
    if(mysql.connect())
    {
        if(mysql.update(sql))
        {
            // 获取插入成功的用户生成的主键id，并设置给当前 user 对象的成员变量
            user.setId(mysql_insert_id(mysql.getConnection()));
            return true;
        }
    }

    return false;
}

// User 表根据用户号码(PK)查询用户信息
User UserModel::query(int id)
{
    char sql[1024] = {0};
    sprintf(sql, "select * from User where id = %d", id);

    MySQL mysql;
    if(mysql.connect())
    {
        MYSQL_RES* res = mysql.query(sql);
        if(res != nullptr)
        {
            // 查询成功
            MYSQL_ROW row = mysql_fetch_row(res);
            if(row != nullptr)
            {
                User user;
                user.setId(atoi(row[0]));
                user.setName(row[1]);
                user.setPassword(row[2]);
                user.setState(row[3]);

                mysql_free_result(res);  // 释放资源
                return user;
            }
        }
    }

    // 查询失败
    return User();
}

// 更新用户状态信息
bool UserModel::updateState(User user)
{
    char sql[1024] = {0};
    sprintf(sql, "update User set state = '%s' where id = %d", user.getState().c_str(), user.getId());

    MySQL mysql;
    if(mysql.connect())
    {
        if(mysql.update(sql))
        {
            return true;
        }
    }

    return false;
}

// 重置用户的状态信息
void UserModel::resetState()
{
    char sql[1024] = "update User set state = 'offline' where state = 'online'";
    MySQL mysql;
    if(mysql.connect())
    {
        mysql.update(sql);
    }
}